package org.android.brasil.projetos.oktoberfest2011.view;

import java.util.List;

import org.android.brasil.projetos.oktoberfest2011.R;
import org.android.brasil.projetos.oktoberfest2011.negocio.model.Apresentacao;
import org.android.brasil.projetos.oktoberfest2011.persistencia.ApresentacaoDAO;
import org.android.brasil.projetos.oktoberfest2011.utils.CompartilhamentoListener;
import org.android.brasil.projetos.oktoberfest2011.utils.Constantes;
import org.android.brasil.projetos.oktoberfest2011.utils.ControleDeBackground;
import org.android.brasil.projetos.oktoberfest2011.utils.DataUtil;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.RelativeLayout;
import android.widget.TextView;

/**
 * 
 * @author júlio
 * 
 */
public class DesfilesAdapter extends BaseAdapter {

	private LayoutInflater mInflater;
	private List<Apresentacao> apresentacoes;
	private Context ctx;

	public DesfilesAdapter(Context context, List<Apresentacao> apr) {
		ctx = context;
		this.mInflater = LayoutInflater.from(context);
		this.apresentacoes = apr;
	}

	public int getCount() {
		return apresentacoes.size();
	}

	public Object getItem(int position) {
		return apresentacoes.get(position);
	}

	public long getItemId(int position) {
		return position;
	}

	public View getView(int position, View convertView, ViewGroup parent) {
		final int pos = position;

		Apresentacao apr = apresentacoes.get(position);

		convertView = mInflater.inflate(R.layout.desfiles_item, null);

		TextView tvHora = (TextView) convertView
				.findViewById(R.idDesfile_Item.tv_hora_inicio);
		TextView tvLocal = (TextView) convertView
				.findViewById(R.idDesfile_Item.tv_local);
		TextView tvDia = (TextView) convertView
				.findViewById(R.idDesfile_Item.tv_dia);

		tvHora.setText(ctx.getResources().getString(R.string.inicio_as)
				+ DataUtil.formatarHora(apr.getHoraInicio()));

		tvLocal.setText(ctx.getResources().getString(R.string.local)
				+ apr.getSetor().substring(2));
		if (DataUtil.ehHoje(apr.getDia())) {
			tvDia.setText(ctx.getResources().getString(R.string.hoje));
			tvDia.setTextSize(20f);
		} else {

			tvDia.setText(apr.getDia()
					+ ctx.getResources().getString(R.string._de_)
					+ DataUtil
							.retornarMesDoAno(Constantes.CALENDAR_MES_DA_OKTOBERFEST)
					+ " - "
					+ DataUtil.retornarDiaSemana(Constantes.ANO_DA_OKTOBERFEST,
							Constantes.CALENDAR_MES_DA_OKTOBERFEST,
							apr.getDia()));

		}
		RelativeLayout rl = (RelativeLayout) convertView
				.findViewById(R.idDesfile_Item.LinearLayoutItem);
		
		new CompartilhamentoListener(ctx, tvDia, apr);
		new CompartilhamentoListener(ctx, tvLocal, apr);
		
		ControleDeBackground.setBackgroundHorario(new View[] { rl },
				new TextView[] { tvHora, tvDia, tvLocal }, position,
				apr.getDia());

		CheckBox ivFavoritar = (CheckBox) convertView
				.findViewById(R.idDesfile_Item.favoritar);
		
		ivFavoritar.setChecked(apr.isFavorito());

		ivFavoritar.setOnCheckedChangeListener(new OnCheckedChangeListener() {
			private int p = pos;

			public void onCheckedChanged(CompoundButton buttonView,
					boolean isChecked) {
				Apresentacao apr = apresentacoes.get(p);
				apr.setFavorito(isChecked);
				ApresentacaoDAO.open(ctx);
				ApresentacaoDAO.atualizar(apr);
				ApresentacaoDAO.close();

			}
		});

		return convertView;
	}
}
